package ve.com.wayoyo.wuml_case;

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompAbstract;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompActividad;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompActor;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompAtributo;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompAtributoER;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompBarra;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompCasoUso;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompClase;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompConector;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompDecision;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompEntidad;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompInicioFin;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompInterface;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompLifeBar;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompLineConector;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompMetodo;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompNodo;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompObjeto;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompSubEntidad;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompTexto;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.CompVariable;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.Componente;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.Diagrama;
import ve.com.wayoyo.wuml_case.DibujoDiagramas.FactoryDiagrama;
import ve.com.wayoyo.wuml_case.Exceptions.AtributoERException;
import ve.com.wayoyo.wuml_case.Exceptions.FormatoDiagramaInvalidoExecption;
import ve.com.wayoyo.wuml_case.Exceptions.TipoDatoException;
import android.R.integer;
import android.graphics.Point;
import android.os.Environment;

public class Loader {

		public Diagrama cargarDiagrama(String path){
			Diagrama diagrama = null;
			try{
				File a = new File(path);
				
				DocumentBuilder docBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
				Document doc=docBuilder.parse(a);
				NodeList diagramas = doc.getElementsByTagName("Diagrama");
				
				if(diagramas != null && diagramas.getLength() > 0){
					diagrama = FactoryDiagrama.factory(((Element)diagramas.item(0)).getAttribute("Tipo"));
					diagrama.setNombre(((Element)diagramas.item(0)).getAttribute("Nombre"));
					diagrama.setNota(((Element)diagramas.item(0)).getAttribute("Nota"));
					diagrama.setLastIdGiven(Integer.valueOf(((Element)diagramas.item(0)).getAttribute("UltimoID")));
					diagrama.disableHelps();
					diagrama.disableTutorial();
					NodeList componentes = ((Element)diagramas.item(0)).getElementsByTagName("Componente");
					for (int i = 0; i < componentes.getLength(); i++) {
						diagrama.AgregarComponente(loadComponent((Element)componentes.item(i)));
					}
					
					NodeList conectores = ((Element)diagramas.item(0)).getElementsByTagName("Conector");
					for (int i = 0; i < conectores.getLength(); i++) {
						Element conSource = ((Element)conectores.item(i));
						CompConector conNuevo= new CompConector(Integer.valueOf(conSource.getAttribute("IDPadre")),Integer.valueOf(conSource.getAttribute("IDHijo"))) ;
						conNuevo.set_childArrowType(Integer.valueOf(conSource.getAttribute("FlechaHijo")));
						conNuevo.set_fatherArrowType(Integer.valueOf(conSource.getAttribute("FlechaPadre")));
						conNuevo.set_currentLineType(Integer.valueOf(conSource.getAttribute("TipoLinea")));
						conNuevo.set_fatherOrientation(Integer.valueOf(conSource.getAttribute("OrientacionPadre")));
						conNuevo.set_childOrientation(Integer.valueOf(conSource.getAttribute("OrientacionHijo")));
						conNuevo.set_childQuadrant(Integer.valueOf(conSource.getAttribute("CuadranteHijo")));
						NodeList puntos = conSource.getElementsByTagName("Punto");
						conNuevo.set_numberOfPoints(puntos.getLength());
						for(int y = 0; y < puntos.getLength(); y++){
							conNuevo.setPointOfLine(Integer.valueOf(((Element)puntos.item(y)).getAttribute("X")),Integer.valueOf(((Element)puntos.item(y)).getAttribute("Y")), y);
						}
						diagrama.getComponenteById(conNuevo.get_fatherId()).get_conectorsBegining().add(conNuevo);
						diagrama.getComponenteById(conNuevo.get_childId()).get_conectorsEnd().add(conNuevo);
						conNuevo.set_childCenter(diagrama.getComponenteById(conNuevo.get_childId()).get_centerPoint());
					}
					
					conectores = ((Element)diagramas.item(0)).getElementsByTagName("LineConector");
					for (int i = 0; i < conectores.getLength(); i++) {
						Element conSource = ((Element)conectores.item(i));
						CompLineConector conNuevo= new CompLineConector(Integer.valueOf(conSource.getAttribute("IDPadre")),Integer.valueOf(conSource.getAttribute("IDHijo"))) ;
						conNuevo.set_childArrowType(Integer.valueOf(conSource.getAttribute("FlechaHijo")));
						conNuevo.set_fatherArrowType(Integer.valueOf(conSource.getAttribute("FlechaPadre")));
						conNuevo.set_currentLineType(Integer.valueOf(conSource.getAttribute("TipoLinea")));
						conNuevo.set_fatherOrientation(Integer.valueOf(conSource.getAttribute("OrientacionPadre")));
						conNuevo.set_childOrientation(Integer.valueOf(conSource.getAttribute("OrientacionHijo")));
						conNuevo.setCosto(Float.valueOf(conSource.getAttribute("Costo")));
						String HC = conSource.getAttribute("HaveCost");
						if(HC.equals("true")){
							conNuevo.set_haveCost(true);
						}else{
							conNuevo.set_haveCost(false);
						}
						NodeList puntos = conSource.getElementsByTagName("Punto");
						conNuevo.set_numberOfPoints(puntos.getLength());
						for(int y = 0; y < puntos.getLength(); y++){
							conNuevo.setPointOfLine(Integer.valueOf(((Element)puntos.item(y)).getAttribute("X")),Integer.valueOf(((Element)puntos.item(y)).getAttribute("Y")), y);
						}
						diagrama.getComponenteById(conNuevo.get_fatherId()).get_conectorsBegining().add(conNuevo);
						diagrama.getComponenteById(conNuevo.get_childId()).get_conectorsEnd().add(conNuevo);
						conNuevo.set_childCenter(diagrama.getComponenteById(conNuevo.get_childId()).get_centerPoint());
						conNuevo.set_fatherCenter(diagrama.getComponenteById(conNuevo.get_fatherId()).get_centerPoint());
					}
					
				}else{
					throw new FormatoDiagramaInvalidoExecption();
				}
		        diagrama.actualizarBordes();
			}catch(Exception e){
				 //xpp.setInput(new StringReader ("<Diagrama><Titulo>Nuevo</Titulo><Tipo>Clase</Tipo></Diagrama>"));
				System.out.println(e.getMessage());
			}
			
			return diagrama;
		}
		
		private Componente loadComponent(Element source){
			String Tipo = source.getAttribute("Tipo");
			if(Tipo.equals("Clase")){
				CompClase nuevo = new CompClase(source.getAttribute("Titulo"));
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				NodeList atributos = source.getElementsByTagName("Atributo");
				for (int i = 0; i < atributos.getLength(); i++) {
					Element attrSource = (Element)atributos.item(i);
					CompAtributo attrNuevo = new CompAtributo(attrSource.getAttribute("NombreVariable"), attrSource.getAttribute("NivelAcceso"));
					
					attrNuevo.setTipoDato(attrSource.getAttribute("TipoDato"),"");
					
					if(attrSource.getAttribute("isFinal").equals("true"))
						attrNuevo.setFinal(true);
					if(attrSource.getAttribute("isStatic").equals("true"))
						attrNuevo.setStatic(true);
					if(attrSource.getAttribute("isVolatile").equals("true"))
						attrNuevo.setVolatile(true);
					NodeList multiplicidad = attrSource.getElementsByTagName("Multiplicidad");
					if(multiplicidad.getLength() > 0){
						try {
							attrNuevo.set_haveMultiplicity(true);
							attrNuevo.set_leftMultiplicity(((Element)multiplicidad.item(0)).getAttribute("Left"));
							attrNuevo.set_rightMultiplicity(((Element)multiplicidad.item(0)).getAttribute("Right"));
						} catch (Exception e) {
							System.out.println(e.getMessage());
						}
					}
					nuevo.addAtributo(attrNuevo);
				}
				NodeList metodos = source.getElementsByTagName("Metodo");
				for (int i = 0; i < metodos.getLength(); i++) {
					Element metSource = (Element)metodos.item(i);
					CompMetodo metNuevo = new CompMetodo(metSource.getAttribute("Nombre"), metSource.getAttribute("NivelAcceso"));
					try {
						metNuevo.setTipoDato(metSource.getAttribute("TipoDato"));
					} catch (TipoDatoException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if(metSource.getAttribute("IsStatic").equals("true"))
						metNuevo.set_isStatic(true);
					if(metSource.getAttribute("IsAbstract").equals("true"))
						metNuevo.set_isAbstract(true);
					if(metSource.getAttribute("IsFinal").equals("true"))
						metNuevo.set_isFinal(true);
					NodeList varEntradas = metSource.getElementsByTagName("VariableEntrada");
					for (int i1 = 0; i1 < varEntradas.getLength(); i1++) {
						Element varSource = (Element)varEntradas.item(i1);
						CompVariable varNueva = new CompVariable(varSource.getAttribute("Nombre"), varSource.getAttribute("TipoDato"));
						if(varSource.getAttribute("IsFinal").equals("true"))
							varNueva.setFinal(true);
						metNuevo.addVariable(varNueva);
						
					}
					nuevo.addMetodo(metNuevo);	
				}
				nuevo.actualizarAchorsPoints();
				nuevo.actualizarPuntoCentral();
				return nuevo;
			}else if (Tipo.equals("Interface")){
				CompInterface nuevo = new CompInterface(source.getAttribute("Titulo"));
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				NodeList metodos = source.getElementsByTagName("Metodo");
				for (int i = 0; i < metodos.getLength(); i++) {
					Element metSource = (Element)metodos.item(i);
					CompMetodo metNuevo = new CompMetodo(metSource.getAttribute("Nombre"), metSource.getAttribute("NivelAcceso"));
					try {
						metNuevo.setTipoDato(metSource.getAttribute("TipoDato"));
					} catch (TipoDatoException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if(metSource.getAttribute("IsStatic").equals("true"))
						metNuevo.set_isStatic(true);
					if(metSource.getAttribute("IsAbstract").equals("true"))
						metNuevo.set_isAbstract(true);
					if(metSource.getAttribute("IsFinal").equals("true"))
						metNuevo.set_isFinal(true);
					NodeList varEntradas = metSource.getElementsByTagName("VariableEntrada");
					for (int i1 = 0; i1 < varEntradas.getLength(); i1++) {
						Element varSource = (Element)varEntradas.item(i1);
						CompVariable varNueva = new CompVariable(varSource.getAttribute("Nombre"), varSource.getAttribute("TipoDato"));
						if(varSource.getAttribute("IsFinal").equals("true"))
							varNueva.setFinal(true);
						metNuevo.addVariable(varNueva);
						
					}
					nuevo.addMetodo(metNuevo);	
				}
				nuevo.actualizarAchorsPoints();
				nuevo.actualizarPuntoCentral();
				return nuevo;
			}else if (Tipo.equals("Abstract")){
				CompAbstract nuevo = new CompAbstract(source.getAttribute("Titulo"));
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				NodeList atributos = source.getElementsByTagName("Atributo");
				for (int i = 0; i < atributos.getLength(); i++) {
					Element attrSource = (Element)atributos.item(i);
					CompAtributo attrNuevo = new CompAtributo(attrSource.getAttribute("NombreVariable"), attrSource.getAttribute("NivelAcceso"));
					try {
						attrNuevo.setTipoDato(attrSource.getAttribute("TipoDato"));
					} catch (AtributoERException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (TipoDatoException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					if(attrSource.getAttribute("isFinal").equals("true"))
						attrNuevo.setFinal(true);
					if(attrSource.getAttribute("isStatic").equals("true"))
						attrNuevo.setStatic(true);
					if(attrSource.getAttribute("isVolatile").equals("true"))
						attrNuevo.setVolatile(true);
					NodeList multiplicidad = attrSource.getElementsByTagName("Multiplicidad");
					if(multiplicidad.getLength() > 0){
						try {
							attrNuevo.set_haveMultiplicity(true);
							attrNuevo.set_leftMultiplicity(((Element)multiplicidad.item(0)).getAttribute("Left"));
							attrNuevo.set_rightMultiplicity(((Element)multiplicidad.item(0)).getAttribute("Right"));
						} catch (Exception e) {
							System.out.println(e.getMessage());
						}
					}
					nuevo.addAtributo(attrNuevo);
				}
				NodeList metodos = source.getElementsByTagName("Metodo");
				for (int i = 0; i < metodos.getLength(); i++) {
					Element metSource = (Element)metodos.item(i);
					CompMetodo metNuevo = new CompMetodo(metSource.getAttribute("Nombre"), metSource.getAttribute("NivelAcceso"));
					try {
						metNuevo.setTipoDato(metSource.getAttribute("TipoDato"));
					} catch (TipoDatoException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if(metSource.getAttribute("IsStatic").equals("true"))
						metNuevo.set_isStatic(true);
					if(metSource.getAttribute("IsAbstract").equals("true"))
						metNuevo.set_isAbstract(true);
					if(metSource.getAttribute("IsFinal").equals("true"))
						metNuevo.set_isFinal(true);
					NodeList varEntradas = metSource.getElementsByTagName("VariableEntrada");
					for (int i1 = 0; i1 < varEntradas.getLength(); i1++) {
						Element varSource = (Element)varEntradas.item(i1);
						CompVariable varNueva = new CompVariable(varSource.getAttribute("Nombre"), varSource.getAttribute("TipoDato"));
						if(varSource.getAttribute("IsFinal").equals("true"))
							varNueva.setFinal(true);
						metNuevo.addVariable(varNueva);
						
					}
					nuevo.addMetodo(metNuevo);	
				}
				nuevo.actualizarAchorsPoints();
				nuevo.actualizarPuntoCentral();
				int a = 1;
				
				return nuevo;
			}else if (Tipo.equals("Entidad")){
				CompEntidad nuevo = new CompEntidad(source.getAttribute("Titulo"));
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				nuevo.setTipoCase(Integer.valueOf(source.getAttribute("TipoCase")));
				NodeList atributos = source.getElementsByTagName("AtributoER");
				for (int i1 = 0; i1 < atributos.getLength(); i1++) {
					Element varSource = (Element)atributos.item(i1);
					try{
						CompAtributoER attrNuevo = new CompAtributoER(varSource.getAttribute("NombreVariable"));
						if(varSource.getAttribute("subEntidad").equals("No-Aplica")){
							attrNuevo.setTipoDato(varSource.getAttribute("TipoDato"));
							attrNuevo.setPrimaryKey(Boolean.parseBoolean(varSource.getAttribute("isPrimaryKey")));
							attrNuevo.setUnique(Boolean.parseBoolean(varSource.getAttribute("isUnique")));
							if(varSource.getAttribute("isNull").equals("true")){
								attrNuevo.setNull(true);
							}else{
								attrNuevo.setNull(false);
							}
							attrNuevo.setAutoIncrement(Boolean.parseBoolean(varSource.getAttribute("isAutoIncrement")));
							attrNuevo.setIndex(Boolean.parseBoolean(varSource.getAttribute("isIndex")));
							attrNuevo.setLongitud(varSource.getAttribute("Logitud"));
							nuevo.addAtributo(attrNuevo);
						}
					}catch (Exception e) {
						System.out.println(e.getMessage());
					}
				}
				NodeList subEntidades = source.getElementsByTagName("SubComponente");
				for (int i1 = 0; i1 < subEntidades.getLength(); i1++) {
					Element varSource = (Element)subEntidades.item(i1);
					CompSubEntidad nuevaSubEntidad;
					nuevaSubEntidad = loadSubComponent(varSource);
					if(nuevaSubEntidad != null){
						nuevo.agregarSubClase(nuevaSubEntidad);
					}
				
				}
		
				nuevo.calculoLongitud();
				nuevo.actualizarAchorsPoints();
				nuevo.actualizarPuntoCentral();	
	
				return nuevo;
			}else if(Tipo.equals("Nodo")){
				CompNodo nuevo = new CompNodo();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.set_radius(Integer.valueOf(source.getAttribute("Radius")));	
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				return nuevo;
			}else if(Tipo.equals("CasoUso")){
				CompCasoUso nuevo = new CompCasoUso();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				return nuevo;
			}else if(Tipo.equals("Actor")){
				CompActor nuevo = new CompActor();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				return nuevo;
			}else if(Tipo.equals("Actividad")){
				CompActividad nuevo = new CompActividad();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				return nuevo;
			}else if(Tipo.equals("Texto")){
				CompTexto nuevo = new CompTexto();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				return nuevo;
			}else if(Tipo.equals("Decision")){
				CompDecision nuevo = new CompDecision();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				return nuevo;
			}else if(Tipo.equals("Barra")){
				CompBarra nuevo = new CompBarra();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				nuevo.setOrientation(Integer.valueOf(source.getAttribute("Orientacion")));
				nuevo.set_height(Float.valueOf(source.getAttribute("Height")));
				nuevo.set_width(Float.valueOf(source.getAttribute("Width")));
				return nuevo;
			}else if(Tipo.equals("InicioFin")){
				CompInicioFin nuevo = new CompInicioFin();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				nuevo.setMode(Integer.valueOf(source.getAttribute("Modo")));
				return nuevo;	
			}else if(Tipo.equals("Objeto")){
				CompObjeto nuevo = new CompObjeto();
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				nuevo.setTitulo(source.getAttribute("Titulo"));
				nuevo.setID(Integer.valueOf(source.getAttribute("ID")));
				nuevo.setBaseLineHeight(Integer.valueOf(source.getAttribute("BaseLineHeight")));
				NodeList lifeBars = source.getElementsByTagName("SubComponente");
				for (int i1 = 0; i1 < lifeBars.getLength(); i1++) {
					Element varSource = (Element)lifeBars.item(i1);
					CompLifeBar nuevaLifeBar = new CompLifeBar();
					nuevaLifeBar.setAnchor(new Point(Integer.valueOf(varSource.getAttribute("AnchorX")),Integer.valueOf(varSource.getAttribute("AnchorY"))));
					nuevaLifeBar.setTitulo(varSource.getAttribute("Titulo"));
					nuevaLifeBar.setID(Integer.valueOf(varSource.getAttribute("ID")));
					nuevaLifeBar.set_height(Float.valueOf(varSource.getAttribute("Height")));
					nuevaLifeBar.actualizarPuntoCentral();
					nuevaLifeBar.actualizarAchorsPoints();
					nuevo.addLifeBar(nuevaLifeBar);
				}
				nuevo.actualizarPuntoCentral();
				return nuevo;	
			}else{
				return null;
			}
		}
			
		private CompSubEntidad loadSubComponent(Element source){
			try{
				CompSubEntidad nuevo = new CompSubEntidad(source.getAttribute("Titulo"));
				nuevo.setID(Integer.parseInt(source.getAttribute("ID")));
				nuevo.setAnchor(new Point(Integer.valueOf(source.getAttribute("AnchorX")),Integer.valueOf(source.getAttribute("AnchorY"))));
				NodeList atributos = source.getElementsByTagName("AtributoER");
				for (int i1 = 0; i1 < atributos.getLength(); i1++) {
					Element varSource = (Element)atributos.item(i1);
					try{
						CompAtributoER attrNuevo = new CompAtributoER(varSource.getAttribute("NombreVariable"));
						if(varSource.getAttribute("subEntidad").equals(nuevo.getTitulo())){
							attrNuevo.setTipoDato(varSource.getAttribute("TipoDato"));
							attrNuevo.setPrimaryKey(Boolean.getBoolean(varSource.getAttribute("isPrimaryKey")));
							attrNuevo.setUnique(Boolean.getBoolean(varSource.getAttribute("isUnique")));
							if(varSource.getAttribute("isNull").equals("true")){
								attrNuevo.setNull(true);
							}else{
								attrNuevo.setNull(false);
							}
							attrNuevo.setAutoIncrement(Boolean.getBoolean(varSource.getAttribute("isAutoIncrement")));
							attrNuevo.setIndex(Boolean.getBoolean(varSource.getAttribute("isIndex")));
							attrNuevo.setLongitud(varSource.getAttribute("Logitud"));
							nuevo.addAtributo(attrNuevo);
						}
					}catch (Exception e) {
						System.out.println(e.getMessage());
					}
				}
				return nuevo;
			}catch (Exception e) {
				System.out.println(e.getMessage());
				return null;
			}
			
		}
		
		public void cargarUserPref(){
			try{
				File a = new File(Environment.getExternalStorageDirectory()+"/WUML/UserPref.wcf");
				if(a.exists()){
					DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
					Document doc=docBuilder.parse(a);
					UserPref pref = UserPref.getInstancia();
					NodeList lista = doc.getElementsByTagName("ColorFondoDiagramas");
					Element Elemento;
					Elemento = (Element)lista.item(0);
					pref.setColorFondoDiagramas(Integer.parseInt(Elemento.getAttribute("value")));
					lista = doc.getElementsByTagName("usingConvections");
					Elemento = (Element)lista.item(0);
					if (Elemento.getAttribute("value").equals("true")){
						pref.setUsingConvections(true);
					}else if (Elemento.getAttribute("value").equals("false"))
						pref.setUsingConvections(false);
//					pref.setUsingConvections(Boolean.getBoolean(Elemento.getAttribute("value")));
					lista = doc.getElementsByTagName("Languaje_Clase");
					Elemento = (Element)lista.item(0);
					pref.setLanguaje(Elemento.getAttribute("value"),"Clase");
					lista = doc.getElementsByTagName("Languaje_ER");
					Elemento = (Element)lista.item(0);
					pref.setLanguaje(Elemento.getAttribute("value"),"ER");
					lista = doc.getElementsByTagName("overridingMethods");
					Elemento = (Element)lista.item(0);
					if (Elemento.getAttribute("value").equals("true")){
						pref.setOverridingMethods(true);
					}else if (Elemento.getAttribute("value").equals("false"))
						pref.setOverridingMethods(false);					
//					pref.setOverridingMethods(Boolean.getBoolean(Elemento.getAttribute("value")));
					lista = doc.getElementsByTagName("NombreProyecto");
					Elemento = (Element)lista.item(0);
					pref.setNombreProyecto(Elemento.getAttribute("value"));
				}else{
					UserPref pref = UserPref.getInstancia();
					pref.setUsingConvections(true);
					pref.setLanguaje("Java","Clase");
					pref.setLanguaje("mySQL","ER");
				}

			}catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
}
